package com.data2wisdom.comm.extend.handler;

import java.util.List;

import com.data2wisdom.comm.extend.util.exception.IDNotFoundException;

/**
 * 由于数据库无法实现表的继承，所以设计上父类使用一个表存储，子类的特殊属性可通过通用参数表存储
 * 子类bean设计方式一：子类的对象，将有两个，一个是继承父类的JavaBean，一个是通用参数表存储的参数组成的JavaBean，这个参数将在JavaBean中共有
 * 子类bean设计方式二（推荐）：子类的对象，只有一个，这个是继承父类的JavaBean，需要用通用参数表存储的参数使用注解标记
 * 通用参数表
 * @author Jeffer
 *
 */
public interface IDynParamsHandler {
	/**
	 * 这个方法可废弃 
	 * @return
	 */
	public String getParamBeanType();

	/**
	 * 这个方法可废弃 
	 * @return
	 */
	public String setParamBeanType();


	
	/**
	 * 保存动态参数
	 * @param paramsBean 动态参数实体Bean
	 */
	public <T> void saveParamBean(T bean) throws Exception;
	
	
	/**
	 * 查询动态参数
	 * @param objectId  对象ID
	 * @clazz
	 * @dbname 数据库连接名
	 * @return  返回参数实体Bean
	 */
	public <T> T getParamBean(String objectId, T bean);
	
	/**
	 * 查询动态参数
	 * @param objectId  对象ID
	 * @clazz
	 * @dbname 数据库连接名
	 * @return  返回参数实体Bean
	 */
	public <T> T getParamBean(String objectId, Class<T> clazz);

		
		
	/**
	 * 删除动态参数
	 * @param objectId
	 */
	public <T> void deleteParamBean(String objectId, T bean);	
	
	
	/**
	 * 保存动态参数
	 * @param objectid   对象ID
	 * @param paramName  参数名称
	 * @param paramValue 参数值
	 */
	public void saveParam(String objectid,String paramName,Object paramValue,Class<?> clazz);	
	
	
	/**
	 * 查询动态参数
	 * @param objectId  对象ID
	 * @param paramName 参数名称
	 * @return  返回参数名称对应的参数值
	 */
	public Object getParam(String objectId, String paramName);
	
	
	/**
	 * 更新
	 * @param bean
	 * @throws IDNotFoundException 
	 */
	public <T> void updateParamBean(T bean) throws IDNotFoundException;
	
	
	/**
	 * 查询动态参数
	 * @param objectId  对象ID
	 * @clazz
	 * @dbname 数据库连接名
	 * @return  返回参数实体Bean
	 */
	public <T> List<T> getParamBeans(String objectId, T bean);
	
	
}
